layui.define(['form', 'table', 'form'], function (exports) {
    var $ = layui.$
        , admin = layui.admin
        , view = layui.view
        , table = layui.table
        , setter = layui.setter
        , response = setter.response
        , form = layui.form;

    var formName = "";
    var tableId = "";


    var obj = {
        /**
        * 创建Table
        * @param cols 列集合
        * @param url 请求地址
        * @param id 表格id
        * @param headtoolbar 头部自定义容器id
        * @param righttoolbar 右侧工具栏内容
        * @param callback 回调函数
        */
        CreateTable: function (id, cols, url, formId, headtoolbar, righttoolbar, callback) {
            tableId = id;
            if (tableId == undefined || tableId == null || tableId == '') {
                tableId = 'layt-table';
            }
            formName = formId;

            if (headtoolbar === "") { headtoolbar: "false" }
            if (righttoolbar === "") {
                righttoolbar = ['filter', 'print']
            };
            var statusCode = response.statusCode;

            table.render({
                elem: '#' + tableId
                , cols: cols
                , text: '对不起，加载出现异常！'
                , url: setter.apiUrl + url
                , headers: {
                    'Authorization': "Bearer " + layui.data(setter.tableName)[setter.request.tokenName],
                    'X-Authorization': "Bearer " + layui.data(setter.tableName)[setter.request.refreshTokenName]
                }
                , where: { queryParams: form.val(formName) } //queryParams 最为table子对象名传给API
                , method: 'post'
                , contentType: 'application/json'
                , request: {
                    pageName: 'pageIndex' //页码的参数名称，默认：page
                    , limitName: 'pageSize' //每页数据量的参数名，默认：limit
                }
                , parseData: function (res) { //res 即为原始返回的数据
                    return { //可以通过table.render.response 方法重新定义code、msg、count、data名称
                        "code": res.statusCode == '200' ? '0' : res.statusCode, //解析接口状态
                        "msg": res.errors, //解析提示文本
                        "count": res.data.totalCount, //解析数据长度
                        "data": res.data.items //解析数据列表
                    };
                },
                text: {
                    none: '暂无相关数据' //默认：无数据。注：该属性为 layui 2.2.5 开始新增
                },
                error: function (e) {
                    if (e.status == statusCode.logout) {
                        layer.open({
                            title: 'E:' + statusCode.logout + ' - 权限不足，重新登录！'
                            , content: 'API权限问题，将关闭所有页面，请重新登录。'
                        });
                        layer.closeAll();
                        view.exit();
                    }
                },
                done: function (res, curr, count) {
                    // 权限认证失败 跳转登陆页面. 
                    if (res[response.statusName] == statusCode.logout) {
                        layer.open({
                            title: 'E:' + statusCode.logout + ' - 权限不足，重新登录！'
                            , content: 'API权限问题，将关闭所有页面，请重新登录。'
                        });
                        view.exit();
                    }
                    //如果是异步请求数据方式，res即为你接口返回的信息。
                    //如果是直接赋值的方式，res即为：{data: [], count: 99} data为当前页数据、count为数据总长度
                    // console.log(res);

                    //得到当前页码
                    // console.log(curr); 

                    //得到数据总量
                    // console.log(count);
                }
                , page: true //开启分页
                , defaultToolbar: righttoolbar
                , toolbar: headtoolbar
            });

            table.on('checkbox(' + tableId + ')', function (obj) {
                console.log(obj)
            });

        },
        /**
        * 创建合计Table
        * @param cols 列集合
        * @param url 请求地址
        * @param id 表格id
        * @param headtoolbar 自定义头部工具栏id
        * @param righttoolbar 右侧工具栏内容
        * @param callback 回调函数
        */
        CreateTotalTable: function (id, cols, url, formId, headtoolbar, righttoolbar, callback) {
            tableId = id;
            if (tableId == undefined || tableId == null || tableId == '') {
                tableId = 'layt-table';
            }
            formName = formId;

            if (headtoolbar == "") { headtoolbar: "false" }

            if (righttoolbar === "") {
                righttoolbar = ['filter', 'print']
            };

            var statusCode = response.statusCode;

            table.render({
                elem: '#' + tableId
                , cols: cols
                , text: '对不起，加载出现异常！'
                , url: setter.apiUrl + url
                , headers: {
                    'Authorization': "Bearer " + layui.data(setter.tableName)[setter.request.tokenName],
                    'X-Authorization': "Bearer " + layui.data(setter.tableName)[setter.request.refreshTokenName]
                }
                , where: { queryParams: form.val(formName) }
                , method: 'post'
                , contentType: 'application/json'
                , totalRow: true
                , parseData: function (res) { //res 即为原始返回的数据
                    return {
                        "code": res.statusCode == '200' ? '0' : res.statusCode, //解析接口状态
                        "msg": res.errors, //解析提示文本
                        "count": res.data.totalCount, //解析数据长度
                        "data": res.data.items //解析数据列表
                    };
                },
                text: {
                    none: '暂无相关数据' //默认：无数据。注：该属性为 layui 2.2.5 开始新增
                },
                error: function (e) {
                    if (e.status == statusCode.logout) {
                        layer.open({
                            title: 'E:' + statusCode.logout + ' - 权限不足，重新登录！'
                            , content: 'API权限问题，将关闭所有页面，请重新登录。'
                        });
                        layer.closeAll();
                        view.exit();
                    }
                },
                done: function (res, curr, count) {
                    // 权限认证失败 跳转登陆页面
                    if (res[response.statusName] == statusCode.logout) {
                        layer.open({
                            title: 'E:' + statusCode.logout + ' - 权限不足，重新登录！'
                            , content: 'API权限问题，将关闭所有页面，请重新登录。'
                        });
                        view.exit();
                    }
                    //如果是异步请求数据方式，res即为你接口返回的信息。
                    //如果是直接赋值的方式，res即为：{data: [], count: 99} data为当前页数据、count为数据总长度
                    console.log(res);

                    //得到当前页码
                    console.log(curr);

                    //得到数据总量
                    console.log(count);
                }
                , page: false //关闭分页
                , toolbar: headtoolbar  //头部左侧工具栏
                , defaultToolbar: righttoolbar
                , height: 650
            });

            table.on('checkbox(' + tableId + ')', function (obj) {
                console.log(obj)
            });

        },

        refreshTable: function (id, formId) {

            table.reload(id, {
                where: { queryParams: form.val(formId) }
                , page: { curr: 1 }
            });
        },
        /**
        * 行按钮点击事件
        *  @param callback 回调函数
        *  @return this
        */
        OnTableRowClick: function (callback, id) {
            if (id == undefined || id == null || id == '') {
                id = 'layt-table';
            }
            layui.use('table', function () {
                var table = layui.table;
                //监听工具条
                table.on('tool(' + id + ')', function (obj) {
                    callback.call(this, obj);
                });
            });
        },
        /**
        *  搜索按钮点击事件
        *  @param id ID参数
        *  @return this
        */
        OnBtnSearch: function (id) {
            if (id == undefined || id == null || id == '') {
                id = 'layt-table';
            }


            table.reload(id, {
                page: { curr: 1 },
                where: {
                    queryparams: GetQueryParam()
                }
            });

        }
    }

    exports('layTable', obj)

});